from django.core.files.storage import Storage
from fdfs_client.client import Fdfs_client
from django.conf import settings


class FdfsStorage(Storage):
    def __init__(self):
        pass

    def open(self, name, mode='rb'):
        # 通过nginx访问图片文件，所以不需要此方法
        pass

    def save(self, name, content, max_length=None):
        # 当文件保存时，会调用这个方法
        client = Fdfs_client(settings.FDFS_CLIENT)
        # 当前服务器中并没有图片文件，图片文件包含在请求报文中，由客户端传到服务器
        # content表示文件对象
        ret = client.upload_by_buffer(content.read())
        # 判断
        if ret.get('Status') == 'Upload successed.':
            return ret.get('Remote file_id')
        else:
            raise Exception('文件上传失败')

    def exists(self, name):
        # 判断指定名称的文件是否存在
        # 文件保存在fastdfs中，自动为文件创建不同的名称，永远是新文件
        return False

    def url(self, name):
        # 返回文件的访问地址
        return settings.FDFS_URL + name
